#include <stdio.h>
#include <stdlib.h>

/*bool类型的定义*/
#define true 1
#define false 0

typedef unsigned char bool;
/*链表节点结构体*/
typedef struct{
    int data;
    struct LNode* next;
}LNode;

typedef LNode* LinkList ;//对链表节点的指针重命名为LinkList,可读性更好
/*===================不带头结点的方式==================*/
/*初始化*/
bool InitList1(LinkList *L){
	*L = NULL;
	return true;
}
/*判空*/
bool Empty1(LinkList L){
	if(L == NULL){
		return true;
	}else{
		return false;
	}
}
/*=====================带头节点的方式========================*/
/*初始化*/
bool InitList2(LinkList *L){
	/*
	传进来的是LNode的指针的指针,所以在后面要给其赋值的时候需要解引用
	*/
	*L = (LNode *)malloc(sizeof(LNode));
	if(L == NULL){
		return false;
	}
	(*L)->next = NULL;  // 关键修复：初始化 next 指针
	return true;
}
/*判空*/
bool Empty2(LinkList L){
	if(L->next == NULL){
		return true;
	}else{
		return false;
	}
}
int main(){
    LinkList L;
    
    printf("不带头结点的创建:%d和判空:%d\n",InitList1(&L),Empty1(L));
	printf("带头结点的创建:%d和判空:%d\n",InitList2(&L),Empty2(L));

}